home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Internet Surfer: Getting Started
/
Internet Surfer - Getting Started (Wayzata Technology)(7231)(1995).bin
/
pc
/
mac
/
bonus
/
peter_le
/
finger-1
/
my_units
/
mystanda.uni
< prev
next >
Wrap
Text File
|
1992-02-24
|
7KB
|
249 lines
unit MyStandardFile;
{ This code is part of the Finger/Fingerd source code, written in THINK Pascal 4 }
{ Copyright 1991-1992 Peter N Lewis }
{ If you use this code, you must give me credit in your about box and documentation }
{ This is part of my generic library of routines }
interface
type
MySFReply = record
Rgood: boolean;
Rfolder: boolean;
RfType: OSType;
RvRefNum: integer;
RdirID: longInt;
RfName: str63;
end;
function MFSPt: point;
procedure GetFile (ffilter: Ptr; numTypes: integer; typeList: SFTypeList; var reply: MySFReply);
procedure GetFile1 (t: OSType; var reply: MySFReply);
procedure GetFolder (ffilter: Ptr; numTypes: integer; typeList: SFTypeList; id: integer; var reply: MySFReply);
{ NOTE: GetFolder must be passed a Dialog ID with Button 11 being a folder button }
{ NOTE: reply.copy should be interpreted as reply.folder }
procedure PutFile (str, origName: str255; var reply: MySFreply);
procedure PutFolder (str, origName: str255; id: integer; var reply: MySFreply);
{ NOTE: PutFolder must be passed a Dialog ID with Button 9 being a folder button }
{ NOTE: reply.copy should be interpreted as reply.folder }
function Button11Hook (item: integer; dlg: DialogPtr): integer;
{ NOTE: Button11Hook sets Button11 when it converts Button 11 to Button 1 (Open) }
function Button9Hook (item: integer; dlg: DialogPtr): integer;
{ NOTE: Button9Hook sets Button9 when it converts Button 9 to Button 1 (Save) }
procedure SetSFFile (wdrn: integer; dirID: longInt);
procedure SegmentStandardFile;
implementation
uses
MyTypes, MyUtils, MyUtilities, MyFileSystem, MyButtons;
{$S StandardFile}
procedure SegmentStandardFile;
begin
end;
procedure SetSFFile (wdrn: integer; dirID: longInt);
var
oe: OSErr;
vrn: integer;
procID: longInt;
s: str255;
begin
if dirID = 0 then
oe := GetWDInfo(wdrn, vrn, dirID, procID)
else
vrn := wdrn;
integerP(SFSaveDiskA)^ := -vrn;
longIntP(CurDirStoreA)^ := dirID;
end;
function MFSPt: point;
var
pt: point;
begin
pt.v := 40;
pt.h := 40;
MFSPt := pt;
end;
procedure SetStdReply (var reply: MySFReply; stdReply: StandardFileReply);
begin
with reply do begin
Rgood := stdReply.sfGood;
Rfolder := ord(stdReply.sfIsFolder) <> 0; { Argghhh! Bloody Apple and there C booleans! }
RfType := stdReply.sfType;
RvRefNum := stdReply.sfFile.vRefNum;
RdirID := stdReply.sfFile.parID;
RfName := stdReply.sfFile.name;
end;
end;
procedure SetOldReply (var reply: MySFReply; oldReply: SFReply);
var
oe: OSErr;
begin
with reply do begin
Rgood := oldReply.good;
Rfolder := oldReply.copy;
RfType := oldReply.fType;
oe := GetDirID(oldReply.vRefNum, RvRefNum, RdirID);
RfName := oldReply.fName;
end;
end;
procedure GetFile (ffilter: Ptr; numTypes: integer; typeList: SFTypeList; var reply: MySFReply);
var
stdReply: StandardFileReply;
oldReply: SFReply;
begin
with reply do
if has_newStdFile then begin
StandardGetFile(ffilter, numTypes, typeList, stdReply);
SetStdReply(reply, stdReply);
end
else begin
SFGetFile(MFSPt, '', ffilter, numTypes, typeList, nil, oldReply);
oldReply.copy := false;
SetOldReply(reply, oldReply);
end;
end;
procedure GetFile1 (t: OSType; var reply: MySFReply);
var
typeList: SFTypeList;
begin
if t = OSType(noType) then
GetFile(nil, -1, typeList, reply)
else begin
typeList[0] := t;
GetFile(nil, 1, typeList, reply);
end;
end;
procedure PutFile (str, origName: str255; var reply: MySFreply);
var
stdReply: StandardFileReply;
oldReply: SFReply;
begin
with reply do
if has_newStdFile then begin
StandardPutFile(str, origname, stdReply);
SetStdReply(reply, stdReply);
end
else begin
SFPutFile(MFSPt, str, origname, nil, oldReply);
oldReply.copy := false;
SetOldReply(reply, oldReply);
end;
end;
var
oldReply: SFReply;
newReply: StandardFileReply;
{ item1 is ThisFolder }
item1: integer;
button1: boolean;
active1: boolean;
procedure SetButtons (dlg: dialogPtr);
var
new1: boolean;
begin
if has_newStdFile then begin
new1 := newReply.sfFile.parID <> 1; { everywhere except desktop???? }
end
else begin
new1 := true;
end;
SetButton(dlg, item1, active1, new1);
end;
function ButtonModalFilter (dlg: dialogPtr; var er: eventRecord; var item: integer): boolean;
begin
SetButtons(dlg);
if (er.what = updateEvt) and (dlg = dialogPtr(er.message)) then begin
UpdateButton(dlg, item1, active1);
end;
ButtonModalFilter := false;
end;
function ButtonModalFilterSys7 (dlg: dialogPtr; var er: eventRecord; var item: integer; data: ptr): boolean;
begin
ButtonModalFilterSys7 := ButtonModalFilter(dlg, er, item);
end;
function ButtonHook (item: integer; dlg: DialogPtr): integer;
begin
if not has_newStdFile or (GetWRefCon(dlg) = longint(sfMainDialogRefCon)) then begin
if item = sfHookFirstCall then begin
button1 := false;
InitButton(dlg, item1, active1, active1);
SetButtons(dlg);
end;
if active1 then begin
if item <> sfHookLastCall then begin
button1 := item = item1;
if button1 then
item := sfItemOpenButton;
end;
end;
end;
ButtonHook := item;
end;
function ButtonHookSys7 (item: integer; dlg: DialogPtr; data: ptr): integer;
begin
ButtonHookSys7 := ButtonHook(item, dlg);
end;
procedure PutFolder (str, origName: str255; id: integer; var reply: MySFreply);
begin
if has_newStdFile then begin
item1 := 13;
active1 := true;
CustomPutFile(str, origName, newReply, id + 1, MFSPt, @ButtonHookSys7, @ButtonModalFilterSys7, nil, nil, nil); {@ButtonModalFilterSys7}
SetStdReply(reply, newReply);
reply.Rfolder := button1;
end
else begin
item1 := 9;
active1 := true;
SFPPutFile(MFSPt, str, origname, @ButtonHook, oldReply, id, nil);
oldReply.copy := button1;
SetOldReply(reply, oldReply);
end;
end;
function CallFileFilterSys7 (pb: CInfoPBPtr; addr: ptr): boolean;
inline
$205F, $4E90;
function FileFilterSys7 (pb: CInfoPBPtr; addr: ptr): boolean;
begin
if (BAND(pb^.ioFlAttrib, $0010) = 0) and (addr <> nil) then
FileFilterSys7 := CallFileFilterSys7(pb, addr)
else
FileFilterSys7 := false;
end;
procedure GetFolder (ffilter: Ptr; numTypes: integer; typeList: SFTypeList; id: integer; var reply: MySFReply);
begin
if has_newStdFile then begin
item1 := 10;
active1 := true;
CustomGetFile(@FileFilterSys7, numTypes, typeList, newReply, id + 1, MFSpt, @ButtonHookSys7, @ButtonModalFilterSys7, nil, nil, ffilter);
SetStdReply(reply, newReply);
reply.Rfolder := button1;
end
else begin
item1 := 11;
active1 := true;
SFPGetFile(MFSPt, '', ffilter, numTypes, typeList, @ButtonHook, oldReply, id, nil);
oldReply.copy := button1;
SetOldReply(reply, oldReply);
end;
end;
end.